package com.erp.erp_dao.Customer;

import com.erp.erp_entitys.Customer.*;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ICustomerDAO {
    long countByExample(CustomerExample example);

    int deleteByExample(CustomerExample example);

    int deleteByPrimaryKey(Integer id);

    int insert(CustomerEntity record);

    int insertSelective(CustomerEntity record);

    List<CustomerEntity> select(CustomerEntity record);
    List<CustomerEntity> selectByExample(CustomerExample example);
    List<CustomerEntity> selectByExample2(CustomerExample example);
    List<CustomerEntity> selectByExample3(CustomerExample example);
    CustomerEntity selectByPrimaryKey(Integer id);

    List<CustomerEntity>  selectByMap( CustomerEntity record);//根据分类、业务员、名称查询
    List<CustomerEntity>  selectByMap2( CustomerEntity record);//根据分类、业务员、名称查询

    List<CustomerEntity> selectByKzt(@Param("days") String days,@Param("salesman") String salesman,@Param("name") String name,@Param("type")String type);//控制台访问

    int updateByExampleSelective(@Param("record") CustomerEntity record, @Param("example") CustomerExample example);

    int updateByExample(@Param("record") CustomerEntity record, @Param("example") CustomerExample example);

    int updateByPrimaryKeySelective(CustomerEntity record);

    int updateByPrimaryKey(CustomerEntity record);

    int updateSalesmanByCode(@Param("codes") String codes);

    /**
     * 获取客户联系人邮件信息
     * @return
     */
    List<Map<String,Object>> getAllCustomerInfo();
    /**
     * 获取供应商联系人邮件信息
     * @return
     */
    List<Map<String,Object>> getAllSupplier();

    /**
     * 获取用户邮件信息
     * @return
     */
    List<Map<String,Object>> getAllUserEmail();

    /**
     * 获取多少天内未联系的客户总数
     * @param days
     * @return
     */
    long contactCount(String days);

    /**
     * 获取多少天内未联系的客户
     * @param days
     * @return
     */
    List<CustomerEntity> contactCountByDays(String days);

    /**
     *根据邮箱获取用户、客户、供应商信息
     * @param emails
     * @return
     */
    List<Map<String,Object>> getMapByEmail(String emails);
    int updateStatusByProcessAndCustomer();

    /**
     * 根据客户编码获取客户信息
     * @param customerCode
     * @return
     */
    CustomerEntity findCustomerByCode(String customerCode);

    /**
     * 根据业务员获取客户
     * @param salesman
     * @return
     */
    List<Map<String,Object>> getCustomerBySalesman(String salesman);

    /**
     * 根据客户编码获取联系人
     * @param company
     * @return
     */
    List<Map<String,Object>> getCustomerContact(String company);

    /**
     * 客户信息记录 统计
     * @param req
     * @return
     */
    List<CustomerInformationRecordRes> getCustomerInfoList(CustomerInformationRecordReq req);

    /**
     * 转移 多个客户编号转移到同一个业务员
     * @param salesmanCode 业务原编码
     * @param code 客户编码
     * @return
     */
    int updateCustomerSal(@Param("salesmanCode") String salesmanCode,@Param("code") String code);
    /**
     * 判断text是否已存在
     * @param text
     * @param zd
     * @return
     */
    String isExist(@Param("text")String text,@Param("zd")String zd,@Param("pretext")String pretext,@Param("id")String id);

    /**
     * 判断邮箱是否已存在
     * @param text
     * @param zd
     * @param pretext
     * @param id
     * @return
     */
    String isExistEmail(@Param("text")String text,@Param("zd")String zd,@Param("pretext")String pretext,@Param("id")String id);


    /**
     * 新客户账期详情统计-分页
     * @param req
     * @return
     */
    List<CustomerBillingPeriodRes> customerBillingPeriod(CustomerBillingPeriodReq req);
    /**
     * 客户下单出货记录统计-分页
     * @param req
     * @return
     */
    List<CustomerOrderAndShipInfoRes> customerOrderAndShipInfo(CustomerOrderAndShipInfoReq req);

    /**
     * 从初次联系以及 360天未做外销合同的潜在客户
     * @return
     */
    List<String> potentialCustomerNotExport(@Param("type") String type,@Param("day") Integer day);
    /**
     * 合作客户距上次成单360天未成单加入公共池
     * @return
     */
    List<String> potentialCustomerLastExport(@Param("type") String type,@Param("day") Integer day);

    /**
     * 将原来的业务员赋值给创建人，并置空原来的业务员
     * @param record
     */
    void updateCustomerByParam(CustomerEntity record);
}